﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Interface;
using FTools.Dominio;
using FTools.Persistencia;
using System.Data.SqlClient;
using System.Collections;
using FTools.Generico;

namespace FTools.Comunicacion
{
    class ComPersonaJuridica : InterfacePersonaJuridica
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerPersonaJuridica objPerPersonaJuridica = new PerPersonaJuridica();

        //OBTENER PERSONA JURIDICA
        public PersonaJuridica obtenerPersonaJuridica(long xIdPersona)
        {
            try
            {
                PerPersona objPerPersona = new PerPersona();
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                PersonaJuridica objPersonaJuridica = objPerPersonaJuridica.obtenerPersonaJuridica(conexion, transaccion, xIdPersona);
                if (objPerPersona.existePersona(conexion, transaccion, objPersonaJuridica.IdPersona))
                {
                    Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaJuridica.IdPersona);
                    objPersonaJuridica.Direccion = objPersona.Direccion;
                    objPersonaJuridica.Puerta = objPersona.Puerta;
                    objPersonaJuridica.Complemento = objPersona.Complemento;
                    objPersonaJuridica.Cp = objPersona.Cp;
                    objPersonaJuridica.Telefono = objPersona.Telefono;
                    objPersonaJuridica.Celular = objPersona.Celular;
                    objPersonaJuridica.Email = objPersona.Email;
                    objPersonaJuridica.Tipo = objPersona.Tipo;
                    objPersonaJuridica.ObjCiudad = objPersona.ObjCiudad;
                }
                transaccion.Commit();
                return objPersonaJuridica;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //EXISTE PERSONA JURIDICA
        public Boolean existePersonaJuridica(long xIdPersona)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerPersonaJuridica.existePersonaJuridica(conexion, transaccion, xIdPersona);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //OBTENER COLECCION PERSONA JURIDICA
        public ArrayList obtenerColeccionPersonaJuridica()
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersonaJuridica = objPerPersonaJuridica.obtenerColeccionPersonaJuridica(conexion, transaccion);
                PerPersona objPerPersona = new PerPersona();
                foreach (PersonaJuridica objPersonaJuridica in colPersonaJuridica)
                {
                    if (objPerPersona.existePersona(conexion, transaccion, objPersonaJuridica.IdPersona))
                    {
                        Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaJuridica.IdPersona);
                        objPersonaJuridica.Direccion = objPersona.Direccion;
                        objPersonaJuridica.Puerta = objPersona.Puerta;
                        objPersonaJuridica.Complemento = objPersona.Complemento;
                        objPersonaJuridica.Cp = objPersona.Cp;
                        objPersonaJuridica.Telefono = objPersona.Telefono;
                        objPersonaJuridica.Celular = objPersona.Celular;
                        objPersonaJuridica.Email = objPersona.Email;
                        objPersonaJuridica.Tipo = objPersona.Tipo;
                        objPersonaJuridica.ObjCiudad = objPersona.ObjCiudad;
                    }
                }
                transaccion.Commit();
                return colPersonaJuridica;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //OBTENER BUSQUEDA PERSONA JURIDICA
        public ArrayList obtenerBusquedaPersonaJuridica(String xRazonSocial, String xRut, String xBps, String xBse)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersonaJuridica = objPerPersonaJuridica.obtenerBusquedaPersonaJuridica(conexion, transaccion, xRazonSocial, xRut, xBps, xBse);
                PerPersona objPerPersona = new PerPersona();
                foreach (PersonaJuridica objPersonaJuridica in colPersonaJuridica)
                {
                    if (objPerPersona.existePersona(conexion, transaccion, objPersonaJuridica.IdPersona))
                    {
                        Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaJuridica.IdPersona);
                        objPersonaJuridica.Direccion = objPersona.Direccion;
                        objPersonaJuridica.Puerta = objPersona.Puerta;
                        objPersonaJuridica.Complemento = objPersona.Complemento;
                        objPersonaJuridica.Cp = objPersona.Cp;
                        objPersonaJuridica.Telefono = objPersona.Telefono;
                        objPersonaJuridica.Celular = objPersona.Celular;
                        objPersonaJuridica.Email = objPersona.Email;
                        objPersonaJuridica.Tipo = objPersona.Tipo;
                        objPersonaJuridica.ObjCiudad = objPersona.ObjCiudad;
                    }
                }
                transaccion.Commit();
                return colPersonaJuridica;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //ALTA PERSONA JURIDICA
        public int altaPersonaJuridica(PersonaJuridica xObjPersonaJuridica)
        {
            SqlTransaction transaccion = null;
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                long idPersona = FuncionesGenericas.generarNumerador("PERSONA");
                xObjPersonaJuridica.IdPersona = idPersona;
                //DATOS PERSONA
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                objPersona.IdPersona = xObjPersonaJuridica.IdPersona;
                objPersona.Nombre = xObjPersonaJuridica.RazonSocial;
                objPersona.Direccion = xObjPersonaJuridica.Direccion;
                objPersona.Puerta = xObjPersonaJuridica.Puerta;
                objPersona.Complemento = xObjPersonaJuridica.Complemento;
                objPersona.Cp = xObjPersonaJuridica.Cp;
                objPersona.Telefono = xObjPersonaJuridica.Telefono;
                objPersona.Celular = xObjPersonaJuridica.Celular;
                objPersona.Email = xObjPersonaJuridica.Email;
                objPersona.Tipo = xObjPersonaJuridica.Tipo;
                objPersona.ObjCiudad = xObjPersonaJuridica.ObjCiudad;
                objPerPersona.altaPersona(conexion, transaccion, objPersona);//ALTA PERSONA
                //
                int res = objPerPersonaJuridica.altaPersonaJuridica(conexion, transaccion, xObjPersonaJuridica);
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //BAJA PERSONA JURIDICA
        public int bajaPersonaJuridica(PersonaJuridica xObjPersonaJuridica)
        {
            SqlTransaction transaccion = null;
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                int res = objPerPersonaJuridica.bajaPersonaJuridica(conexion, transaccion, xObjPersonaJuridica);
                if (objPerPersona.existePersona(conexion, transaccion, xObjPersonaJuridica.IdPersona))
                {
                    objPersona = objPerPersona.obtenerPersona(conexion, transaccion, xObjPersonaJuridica.IdPersona);
                    objPerPersona.bajaPersona(conexion, transaccion, objPersona);//BAJA PERSONA
                }
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //MODIFICA PERSONA JURIDICA
        public int modificaPersonaJuridica(PersonaJuridica xObjPersonaJuridica)
        {
            
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                if (objPerPersona.existePersona(conexion, transaccion, xObjPersonaJuridica.IdPersona))
                {
                    objPersona.IdPersona = xObjPersonaJuridica.IdPersona;
                    objPersona.Nombre = xObjPersonaJuridica.RazonSocial;
                    objPersona.Direccion = xObjPersonaJuridica.Direccion;
                    objPersona.Puerta = xObjPersonaJuridica.Puerta;
                    objPersona.Complemento = xObjPersonaJuridica.Complemento;
                    objPersona.Cp = xObjPersonaJuridica.Cp;
                    objPersona.Telefono = xObjPersonaJuridica.Telefono;
                    objPersona.Celular = xObjPersonaJuridica.Celular;
                    objPersona.Email = xObjPersonaJuridica.Email;
                    objPersona.Tipo = xObjPersonaJuridica.Tipo;
                    objPersona.ObjCiudad = xObjPersonaJuridica.ObjCiudad;
                    objPerPersona.modificaPersona(conexion, transaccion, objPersona);//MODIFICA PERSONA
                }
                int res = objPerPersonaJuridica.modificaPersonaJuridica(conexion, transaccion, xObjPersonaJuridica);
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
